package es.uma.scgt.controlador;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import es.uma.scgt.autenticacion.UserDetailsImpl;
import es.uma.scgt.modelo.Usuario;
import es.uma.scgt.dao.UsuarioDao;
@Controller
public class AutenticacionControlador {

	private static final String MENSAJE = "error";
	private static final String CONTRASENA = "contrasena";
	
	@Autowired
	private UsuarioDao usuarioDao;
	

	@RequestMapping("/loginIncorrecto")
	public String loginIncorrecto(ModelMap model) {
		model.addAttribute(MENSAJE, "Usuario o password incorrecto");
		return "login";
	}
	
	@RequestMapping("/cambiarContrasena")
	public String cambiarContrasena(ModelMap model) {
		
		return "CambiarContrasena";
	}
	
	@RequestMapping("/cambiarContrasenaAceptar")
	@Transactional
	public String cambiarContrasenaAceptar(ModelMap model, @RequestParam("contrasenaActual")String contrasenaActual, @RequestParam("nuevaContrasena")String nuevaContrasena,@RequestParam("confirmarContrasena")String confirmarContrasena ) {
		
		
		UserDetailsImpl userDetails = (UserDetailsImpl) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
		String contrasena = userDetails.getPassword();
		
		if (contrasena.equals(contrasenaActual)){
			if(nuevaContrasena.equals(confirmarContrasena)){
				model.addAttribute("ok", "Contraseña cambiada con éxito");
				
				Integer id;
				id = userDetails.getUsuarioId();
				Usuario tmpUsuario = usuarioDao.encuentraUsuarioPorId(id);
				tmpUsuario.setPassword(nuevaContrasena);
				usuarioDao.editarUsuario(tmpUsuario);
				
				
			}else{
				model.addAttribute("error", "Error al cambiar la contraseña, inténtelo de nuevo");
			}
		}else{
			model.addAttribute("error", "Error al cambiar la contraseña, inténtelo de nuevo");
		}
		
		return "CambiarContrasena";
	}
	@RequestMapping("/informacion")
	public String informacion(ModelMap model) {
		
		return "Informacion";
	}
	@RequestMapping("/autenticado")
	public String autenticado(ModelMap model) {
		model.addAttribute(MENSAJE, SecurityContextHolder.getContext().getAuthentication().getName());
		return "Principal";
	}

	
	@RequestMapping("/logout")
	public String logout(ModelMap model) {
		model.addAttribute("ok", "Has salido del sistema.");
		return "login";
	}
	
	@RequestMapping("/login")
	public String veALogin(ModelMap model) {
		if( SecurityContextHolder.getContext().getAuthentication() != null &&
				!"anonymousUser".equals(SecurityContextHolder.getContext().getAuthentication().getName())){
			return autenticado(model);
		}
		return "login";
	}
	
	@RequestMapping("/403")
	public String accessDenied(ModelMap model) {
		return "403";
	}

}
